import axios, { AxiosInstance, AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios';
import { ElMessage } from 'element-plus';

// 创建一个axios实例，设置基础URL和响应时间
const request = axios.create({
   // 默认请求地址，根据环境的不同可在.env 文件中进行修改
  baseURL: import.meta.env.VITE_BASE_API,
  // 设置接口访问超时时间
  timeout: 300000, // request timeout，60 1000 5
  // 跨域时候允许携带凭证
  withCredentials: true
});

//拦截器  -请求拦截
request.interceptors.request.use(
  (config) => {
    //部分接口需要token
    const token = localStorage.getItem('token');
    if (token) {
      config.headers.token = token;
    }
    return config;
  },
  (err) => {
    return Promise.reject(err);
  }
);
//拦截器  -响应拦截
request.interceptors.response.use(
  (res: any) => {
    // 如果响应码不是200，则返回一个拒绝状态的Promise，并传入错误信息
    if (res.data.code !== 200) {
      return Promise.reject(res.data.msg);
    } else {
      // 否则返回响应
      return res.data.data;
    }
  },
  // 如果响应码不是200，则返回一个拒绝状态的Promise，并传入错误信息
  (err) => {
    let message = '';
    const status = err.response.status;
    switch (status) {
      case 1:
        message = 'aaaa';
        break;
      default:
        message = '请求错误';
        break;
    }
    // 弹出错误信息
    ElMessage({
      message: message,
      type: 'error'
    });
    return Promise.reject(err);
  }
);

//整体导出
export default request;